import pymysql


class DBUtil:
    # 定义全局变量
    conn = None


    # 封装数据库创建conn,因为调用方不关心，所以设置为私有方法，return conn 为了查询或者增删改方法 获取连接conn 对象
    @classmethod
    def __connect_db(cls):
        cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student", password="iHRM_student_2021",
                                   database="ihrm", charset="utf8")
        return cls.conn

    # 封装数据库关闭close，定义成私有方法
    @classmethod
    def __close_db(cls):
        cls.conn.close()

    # 查询方法
    @classmethod
    def select_one(cls, sql):

        # 定义变量，不定义也没有关系，为的是消除pycharm 代码规范的问题
        result = None
        cursor = None
        try:
            # 创建连接conn，此时的conn 必须是创建好的连接conn，如果是None的话，没有办法获取游标cursor
            cls.conn = cls.__connect_db()
            # 获得游标cursor
            cursor = cls.conn.cursor()
            # 执行查询语句,获取结果，并且返回结果
            cursor.execute(sql)
            result = cursor.fetchone()
        except Exception as err:
            print("查询数据库错误:", str(err))
        finally:
            # 关闭游标cursor
            cursor.close()
            # 关闭连接conn
            cls.__close_db()
            # 最后返回查询结果,如果放在前面的话，后面的代码就不执行了
            return result

    # 增删改方法
    @classmethod
    def uid_db(cls, sql):
        #定义变量
        cursor = None
        try:
            # 创建连接conn(如果不调用__connect_db(), conn的值为全局变量的值 None)
            cls.conn = cls.__connect_db()
            # 获得游标cursor
            cursor = cls.conn.cursor()
            # 执行增删改语句,打印一下影响的行数
            cursor.execute(sql)
            affect_rows = cls.conn.affected_rows()
            print("影响的行数=", affect_rows)
            # 事务的提交、回滚
            cls.conn.commit()
        except Exception as err:
            print("增删改数据库报错=",str(err))
            #事务回滚
            cls.conn.rollback()
        finally:
            # 关闭游标cursor
            cursor.close()
            # 关闭连接conn
            cls.__close_db()





if __name__ == '__main__':
    # result = DBUtil.select_one("SELECT * FROM t_book;")
    # print("result=",result)
    DBUtil.uid_db("UPDATE t_book set title='三国志' WHERE id=5;")


